import random
import json  # 新增：导入json模块，用于解析POST的JSON数据
from django.shortcuts import HttpResponse
from agent.login_agent import create_login


# 1. 账号登录（支持POST，解析JSON参数）
def login(request):
    # 重点：处理POST请求（前端发送的是POST）
    if request.method == "POST":
        try:
            # 解析前端发送的JSON数据（替代request.GET）
            data = json.loads(request.body)
            username = data.get("username")  # 从JSON中获取用户名
            password = data.get("password")  # 从JSON中获取密码
        except json.JSONDecodeError:
            # 处理JSON格式错误（比如前端传错格式）
            return HttpResponse(
                json.dumps({"code": 500, "msg": "请求格式错误，请用JSON传递参数"}),
                content_type="application/json"  # 指定响应为JSON格式
            )

        # 原有登录逻辑不变（调用create_login）
        if not username or not password:  # 新增：参数非空校验
            return HttpResponse(
                json.dumps({"code": 500, "msg": "用户名和密码不能为空"}),
                content_type="application/json"
            )

        question = f"请登录系统，用户名：{username}，密码是：{password}"
        answer = create_login(question)

        # 返回JSON响应（指定content_type）
        if "成功" in answer:
            return HttpResponse(
                json.dumps({"code": 200, "msg": "登录成功"}),
                content_type="application/json"
            )
        else:
            return HttpResponse(
                json.dumps({"code": 500, "msg": f"登录失败：{answer}"}),  # 新增：返回具体失败原因
                content_type="application/json"
            )

    # 若收到非POST请求（如GET），返回不支持的提示
    return HttpResponse(
        json.dumps({"code": 405, "msg": "仅支持POST请求，请用POST方式提交"}),
        content_type="application/json"
    )


# 2. 发送验证码（同理：支持POST，解析JSON参数）
def send_email(request):
    if request.method == "POST":
        try:
            # 解析JSON数据（前端会传{"email": "xxx@xxx.com"}）
            data = json.loads(request.body)
            email = data.get("email")
        except json.JSONDecodeError:
            return HttpResponse(
                json.dumps({"code": 500, "msg": "请求格式错误，请用JSON传递邮箱"}),
                content_type="application/json"
            )

        # 参数校验
        if not email:
            return HttpResponse(
                json.dumps({"code": 500, "msg": "邮箱不能为空"}),
                content_type="application/json"
            )

        # 原有逻辑：生成验证码、调用create_login
        code = str(random.randint(1000, 10000))
        question = f"给用户的邮箱是:{email},发送一封邮件，邮件标题是 :知识图谱后台系统验证码登录，邮件内容是:{code}"
        answer = create_login(question)

        if "成功" in answer:
            data = {"code": 200, "msg": "发送成功"}
            rs = HttpResponse(json.dumps(data), content_type="application/json")
            rs.set_cookie("code", code, max_age=5 * 60)  # 设置Cookie（5分钟有效）
            return rs
        else:
            return HttpResponse(
                json.dumps({"code": 500, "msg": f"发送失败：{answer}"}),
                content_type="application/json"
            )

    # 非POST请求提示
    return HttpResponse(
        json.dumps({"code": 405, "msg": "仅支持POST请求"}),
        content_type="application/json"
    )


# 3. 验证码登录（同理：支持POST，解析JSON参数）
def code_login(request):
    if request.method == "POST":
        try:
            # 解析JSON数据（前端会传{"verifyCode": "1234"}）
            data = json.loads(request.body)
            user_input_code = data.get("verifyCode")  # 前端绑定的变量是verifyCode，对应这里
        except json.JSONDecodeError:
            return HttpResponse(
                json.dumps({"code": 500, "msg": "请求格式错误，请用JSON传递验证码"}),
                content_type="application/json"
            )

        # 参数校验
        if not user_input_code:
            return HttpResponse(
                json.dumps({"code": 500, "msg": "验证码不能为空"}),
                content_type="application/json"
            )

        # 原有逻辑：获取Cookie中的验证码
        cookie_code = request.COOKIES.get("code")
        if not cookie_code:
            return HttpResponse(
                json.dumps({"code": 500, "msg": "验证码失效，请重新获取"}),
                content_type="application/json"
            )
        elif user_input_code == cookie_code:
            return HttpResponse(
                json.dumps({"code": 200, "msg": "登录成功"}),
                content_type="application/json"
            )
        else:
            return HttpResponse(
                json.dumps({"code": 500, "msg": "验证码不正确"}),
                content_type="application/json"
            )

    # 非POST请求提示
    return HttpResponse(
        json.dumps({"code": 405, "msg": "仅支持POST请求"}),
        content_type="application/json"
    )